// 引入库
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import { getTimeStamp } from '@/utils/auth'
import router from '@/router'

const checkTimeout = () => {
  const timeout = 1000 * 60 * 60 * 2
  const loginTime = getTimeStamp()
  const now = new Date()
  const nowTime = now.getTime()
  return nowTime - loginTime > timeout
}

// axios.defaults.baseURL = '123'
const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,

  timeout: 5000
})

// 请求拦截器
// 可以接受两个参数
request.interceptors.request.use(
  config => {
    if (store.getters.token) {
      // 统一提交token
      // 这里使用的是 Bearer JWT token 标准
      const isTimeOut = checkTimeout()
      if (isTimeOut) {
        store.dispatch('user/logout')
        router.push('/login')
        return Promise.reject(new Error('已超时，请重新登陆'))
      }
      config.headers.Authorization = `Bearer ${store.getters.token}`
    }
    return config
  },
  err => {
    console.log(err)
  }
)

// 响应拦截器
request.interceptors.response.use(
  res => {
    // console.log(res, 'xiangying')
    const { success, message, data } = res.data
    if (success) {
      // 返回数据
      // console.log('success')
      return data
    } else {
      // 数据层面的失败
      Message.error(message)
      return Promise.reject(new Error(message))
    }
  },
  err => {
    // 报错非常多（断网，路径错误，服务器奔溃都会算报错）
    console.log(err)
    if (err.response && err.response.data && err.response.data.code === 10002) {
      store.dispatch('user/logout')
      router.push('/login')
    }
    Message.error(err.message || '系统繁忙，请稍后再试')
    // 拒绝当前的promise
    return Promise.reject(new Error('系统繁忙，请稍后再试'))
  }
)

export default request
